#include <stdio.h>
#include "sys/types.h"
#include <unistd.h>
#include "sys/wait.h"

int main(int argc, char const *argv[])
{
    printf("主进程开始执行\n");
    pid_t pid = fork();
    if(pid==0){
        printf("child process,id=%d\n",getpid());
        char path[]="/usr/bin/ping";
        //参数列表除了开头结尾，自定义要传三个（尝试ping次数10,网址）
        char *argv[]={path,"-c", "10", "www.baidu.com",NULL};
        // 使用默认环境变量
        char *envp[] = {NULL}; 
        //清空子进程内存，父进程正常运行
        //参数：地址、参数列表、环境变量（传不传都是null）
        execve(path,argv,NULL);
        //因为子进程正常执行other程序，能到这说明失败了
        printf("execve failed\n");
        return -1;
    }
    else{
        //等待子进程结束，父进程才再结束，比较合理
        printf("parent process,id=%d\n",getpid());
        int result;  
        //让父进程（子线程pid）阻塞等待（0是阻塞等待，WNOHANG是非阻塞）
        //result返回值：-1失败，0没有子进程结束，正常阻塞返回子进程id
        waitpid(pid,&result,0);
        printf("子进程结束，父进程继续，返回值为%d\n",result); 
    }
    printf("进程执行结束，id=%d\n",getpid());
    return 0;
}


